#include <json/json.h>
#include <iostream>
#include <sstream>
#include <string>
#include <memory>
#include "log.hpp"
namespace cloud
{
    class JsonUtil
    {
    public:
        static bool Serialize(Json::Value &root,std::string* str)//序列化 传入一个value对象，你给我序列化出来一个字符串
        {
            Json::StreamWriterBuilder swb;
            std::unique_ptr<Json::StreamWriter> sw(swb.newStreamWriter());//这一套操作基本上都是公式，需要用熟了
            std::stringstream ss;
            sw->write(root,&ss);
            *str = ss.str();
            return true;
        }
        static bool DeSerialize(std::string& str,Json::Value *root)//反序列化 传入一个序列化后的字符串，你给我搞出来一个反序列化后的value对象
        {
            Json::CharReaderBuilder crb;
            std::unique_ptr<Json::CharReader> cb(crb.newCharReader());
            std::string err;
            bool ret = cb->parse(str.c_str(),str.c_str() + str.size(),root,&err);
            if(ret == false)
            {
                logMassage(ERROR,"反序列化错误: %s\n",err.c_str());
                return false;
            }
            return true;
        }
    };
}